今天來完成在ubuntu中私鑰的使用問題。在回去看了一遍之前的文章,以及翻閱了官網的Document之後,看到了secrets的用法,剛好就適合處理private key,當初真該早點意識到的。
1.在compose-file的檔案中加入secrets的建立配置
secrets:
ubuntu_ed_key:
file: ./secret/ssh_host_ed25519_key
2.再來將要使用secret的APP標示出來,如我們昨天的例子就是用interfact
version: "3.8"
services:
first-sftp:
image: first-sftp:1.0
build:
context: ./sftp/
dockerfile: Dockerfile
ports:
- 2222:22
volumes:
- ./secret/ssh_host_server_ed25519_key:/etc/ssh/ssh_host_ed25519_key
- d:/share:/home/user/share
command: user:1111:1001
interfact:
image: interfact:1.0
build:
context: ./interfact/
dockerfile: Dockerfile
ports:
- 2223:80
tty: true
secrets:
- source: ubuntu_ed_key
mode: 0400 # mode 設成400只有自己可讀,這樣sftp才不會說你太開放
secrets:
ubuntu_ed_key:
file: ./secret/ssh_host_ed25519_key
3.使用stack執行起來我們的服務,可以看到多建立了secret的項目
$ docker stack deploy -c docker-compose.yaml sftp-app
Ignoring unsupported options: build
Creating network sftp-app_default
Creating secret sftp-app_ubuntu_ed_key
Creating service sftp-app_interfact
Creating service sftp-app_first-sftp
4.查看secret檔案。在我們的服務執行起來之後,可以進入我們的container查看secret檔案,secret檔案會放在/run/secrets/
目錄底下。
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
6ac3d6f74ba8 first-sftp:1.0 "/entrypoint user:11…" 27 seconds ago Up 23 seconds 22/tcp
sftp-app_first-sftp.1.wes9z5s6ocgs40qoj6g7j9duo
e972c598a9fa interfact:1.0 "/bin/bash" 30 seconds ago Up 27 seconds
sftp-app_interfact.1.0c9ajol7ms0lzir8egq9edxo1
$ docker exec -it e972c598a9fa bash
root@e972c598a9fa:/# cd run/secrets/
root@e972c598a9fa:/run/secrets# ls
ubuntu_ed_key
# 可以看到我們剛剛建立名為ubuntu_ed_key的secret檔案
5.尋找sftp server的位址
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
678l08i7hqmn sftp-app_default overlay swarm
$ docker inspect 678l08i7hqmn
# 找到first-sftp的位址
6.接下來就可以使用sftp指令連接我們建置的sftp server,第一次連接都會要我們認證sftp,之後就不用了。
root@d0dfaf2e1e6d:/# sftp -i run/secrets/ubuntu_ed_key user@10.0.2.3
The authenticity of host '10.0.2.3 (10.0.2.3)' can't be established.
RSA key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.2.3' (RSA) to the list of known hosts.
Connected to 10.0.2.3.
sftp>
看到sftp>
就是連接成功了